Ukoncovani systemu

Otázka od: Jiri Cincura

1. 11. 2004 1:01

Ahoj,
  vi nekdo, jak odchytit ukoncovani systemu jeste drive nez se zacnou
ukoncovat sluzby? A to cele ze sluzby.  

--
  Jiri Cincura
  e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
  mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
   ICQ: 314711544 | http://phorum.cincura.net/
 ---
  And if our times are difficult and perplexing,
  so are they challenging and filled with opportunity.
                                            -Robert F. Kennedy, 1961



Odpovedá: Jiri Cincura

2. 11. 2004 10:15

Jiri Cincura wrote:
> Ahoj,
> vi nekdo, jak odchytit ukoncovani systemu jeste drive nez se zacnou
> ukoncovat sluzby? A to cele ze sluzby.  

Nekecejte, ze to nikdo fakt nevi.  

--
  Jiri Cincura
  e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
  mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
   ICQ: 314711544 | http://phorum.cincura.net/
 ---
  And if our times are difficult and perplexing,
  so are they challenging and filled with opportunity.
                                            -Robert F. Kennedy, 1961


Odpovedá: Milan Tomes

2. 11. 2004 10:31

Podivej se na WM_QUERYENDSESSION. Tohle by Ti melo pomoci...

S pozdravem

Milan Tomes

> [mailto:delphi-l-owner@clexpert.cz]On Behalf Of Jiri Cincura
> Sent: Tuesday, November 02, 2004 10:15 AM
>
> > vi nekdo, jak odchytit ukoncovani systemu jeste drive nez se zacnou
> > ukoncovat sluzby? A to cele ze sluzby.  


Odpovedá: Jiri Cincura

2. 11. 2004 11:11

Milan Tomes wrote:
> Podivej se na WM_QUERYENDSESSION. Tohle by Ti melo pomoci...

A to pojede ze sluzby??? Musel bych mit pro ni nejake okno, ne?

--
  Jiri Cincura
  e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
  mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
   ICQ: 314711544 | http://phorum.cincura.net/
 ---
  And if our times are difficult and perplexing,
  so are they challenging and filled with opportunity.
                                            -Robert F. Kennedy, 1961



Odpovedá: Milan Tomes

2. 11. 2004 11:29

No a je problem nejake vytvorit ???  
Mam takovy neblahy pocit, ze i sluzba musi mit nekde nejakou WndProc, pres
kterou probihaji messages... Jde jen o to podivat se jak a kde je ta WndProc
zabalena...

S pozdravem

Milan Tomes

> [mailto:delphi-l-owner@clexpert.cz]On Behalf Of Jiri Cincura
> Sent: Tuesday, November 02, 2004 11:11 AM
>
> Milan Tomes wrote:
> > Podivej se na WM_QUERYENDSESSION. Tohle by Ti melo pomoci...
>
> A to pojede ze sluzby??? Musel bych mit pro ni nejake okno, ne?


Odpovedá: Petr Cafourek

2. 11. 2004 16:32

Tohle by melo fungovat:

type
  TForm1 = class(TForm)
   ...
  private
    procedure WMEndSession(var Msg : TWMEndSession); message WM_ENDSESSION;
  public
   ...
  end;

implementation

{$R *.DFM}

procedure TForm1.WMEndSession(var Msg : TWMEndSession);
begin
  if Msg.EndSession = true then
    ShowMessage('Windows is shutting down !');
  inherited;
end;


> No a je problem nejake vytvorit ???  
> Mam takovy neblahy pocit, ze i sluzba musi mit nekde nejakou WndProc, pres
> kterou probihaji messages... Jde jen o to podivat se jak a kde je ta WndProc
> zabalena...

> S pozdravem

> Milan Tomes

>> [mailto:delphi-l-owner@clexpert.cz]On Behalf Of Jiri Cincura
>> Sent: Tuesday, November 02, 2004 11:11 AM
>>
>> Milan Tomes wrote:
>> > Podivej se na WM_QUERYENDSESSION. Tohle by Ti melo pomoci...
>>
>> A to pojede ze sluzby??? Musel bych mit pro ni nejake okno, ne?





--
S pozdravem,
 Petr Cafourek
 mailto:petr.cafourek.d7@seznam.cz


Odpovedá: Petr Cafourek

2. 11. 2004 16:36

Tohle by melo fungovat:

type
  TForm1 = class(TForm)
   ...
  private
    procedure WMEndSession(var Msg : TWMEndSession); message WM_ENDSESSION;
  public
   ...
  end;

implementation

{$R *.DFM}

procedure TForm1.WMEndSession(var Msg : TWMEndSession);
begin
  if Msg.EndSession = true then
    ShowMessage('Windows is shutting down !');
  inherited;
end;
S pozdravem,
 Petr Cafourek
 mailto:petr.cafourek.d7@seznam.cz


Odpovedá: Jiri Cincura

2. 11. 2004 17:14

Petr Cafourek wrote:
> Tohle by melo fungovat:
>
> type
> TForm1 = class(TForm)
> ...

Hmm, tohle ale chce Form. A to v neinteraktivni sluzbe tezko bude fungovat.

--
  Jiri Cincura
  e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
  mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
   ICQ: 314711544 | http://phorum.cincura.net/
 ---
  And if our times are difficult and perplexing,
  so are they challenging and filled with opportunity.
                                            -Robert F. Kennedy, 1961



Odpovedá: Ludek ZITA

2. 11. 2004 17:29

On Behalf Of Jiri Cincura
> > Ahoj,
> > vi nekdo, jak odchytit ukoncovani systemu jeste drive nez
> se zacnou
> > ukoncovat sluzby? A to cele ze sluzby.  
>

Ahoj.
Vystrel do tmy :TService.OnServiceShutdown nebo TService.OnServiceStop
Nevyzkouseno, nepotvrzeno, vice bych sazel na to prvni.


Ludek


Odpovedá: Milan Tomes

2. 11. 2004 17:45

Pokud pouzivas Delphi wrapper (unit SvcMgr), tak se podivej na
TServiceThread.Execute a TServiceThread.ProcessRequests. Tam se zpracovava
smycka zprav a v pripade, ze zprava neni CM_SERVICE_CONTROL_CODE tak se vola
klasicke DispatchMessage...
Jenom nevim, jestli se WM_QUERYENDSESSION posila i sluzbam a v MSDN o tom
mlci...

S pozdravem

Milan Tomes

> [mailto:delphi-l-owner@clexpert.cz]On Behalf Of Jiri Cincura
> Sent: Tuesday, November 02, 2004 4:54 PM
>
> Petr Cafourek wrote:
> > Tohle by melo fungovat:
> >
> > type
> > TForm1 = class(TForm)
> > ...
>
> Hmm, tohle ale chce Form. A to v neinteraktivni sluzbe tezko bude
> fungovat.


Odpovedá: Jiri Cincura

2. 11. 2004 19:16

Milan Tomes wrote:
> Pokud pouzivas Delphi wrapper (unit SvcMgr), tak se podivej na
> TServiceThread.Execute a TServiceThread.ProcessRequests. Tam se
> zpracovava smycka zprav a v pripade, ze zprava neni
> CM_SERVICE_CONTROL_CODE tak se vola klasicke DispatchMessage... Jenom
> nevim, jestli se WM_QUERYENDSESSION posila i sluzbam a v MSDN o tom
> mlci...

No ja bych to mozna i rad pouzil, ale nejde to.

Ale podivam se na to, mozna me neco nakopne.

Sluzba je napsana v .NETu. Ptam se tu, pac na .NET konfere u emvac.cz taky
moc nevi.

Abyste taky vedeli, proc to chci. Sluzba obhospodaruje dial-up spojeni,
ktere by se normalne melo pri ukoncovani systemu ukoncit, ale neukonci GRPS
zustane normalne viset (system se ukonci, ale na mobilu jsem porad
pripojen). Chtel jsem to udelat pres sluzbu a OnShutdown, tam se to sice
provede, ale vzhledem k tomu, ze se slzby ukoncuji "nahodne" (bez ohledu na
zavislosti), nestihnu se odpojit (rasdial prikaz uz nereaguje).
Proto bych to potreboval jeste behem vlastniho ukoncovani a ne uz pri
shazovani sluzeb.
Nakonec to vypada na normalni app., kde se to bude ukoncovat ve
OnCloseQuery. Ale je to takove nehezke. Chci to az jako posledni reseni,
hlavne, ze by se vzdy na serveru treba musel admin zalogovat (treba pres
Auto-Login), coz je dost nebezpecne a dost nehezke.

--
  Jiri Cincura
  e-mail: mailto:jiri@cincura.net; | http://www.cincura.net/
  mailto:xcincura@informatics.muni.cz | http://photo.cincura.net/
   ICQ: 314711544 | http://phorum.cincura.net/
 ---
  And if our times are difficult and perplexing,
  so are they challenging and filled with opportunity.
                                            -Robert F. Kennedy, 1961


Odpovedá: Ondrej Kelle

3. 11. 2004 9:24

> No ja bych to mozna i rad pouzil, ale nejde to.
>
> Ale podivam se na to, mozna me neco nakopne.
>
> Sluzba je napsana v .NETu. Ptam se tu, pac na .NET konfere u
> emvac.cz taky moc nevi.
>
> Abyste taky vedeli, proc to chci. Sluzba obhospodaruje
> dial-up spojeni, ktere by se normalne melo pri ukoncovani
> systemu ukoncit, ale neukonci GRPS zustane normalne viset
> (system se ukonci, ale na mobilu jsem porad pripojen). Chtel
> jsem to udelat pres sluzbu a OnShutdown, tam se to sice
> provede, ale vzhledem k tomu, ze se slzby ukoncuji "nahodne"
> (bez ohledu na zavislosti), nestihnu se odpojit (rasdial
> prikaz uz nereaguje).
> Proto bych to potreboval jeste behem vlastniho ukoncovani a
> ne uz pri shazovani sluzeb.

Ak sluzba zada SERVICE_ACCEPT_SHUTDOWN vo volani SetServiceStatus zo svojej
service control handler procedury, potom dostane od systemu volanie
SERVICE_CONTROL_SHUTDOWN.

http://msdn.microsoft.com/library/en-us/dllproc/base/service_control_handler
_function.asp

Poradie (voci inym sluzbam), v akom to volanie od systemu dostane, je mozne
zmenit pomocou SetProcessShutdownParameters:
http://msdn.microsoft.com/library/en-us/dllproc/base/setprocessshutdownparam
eters.asp

HTH
TOndrej